<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://lf9-cdn-tos.bytecdntp.com/cdn/expire-1-M/vue/2.6.14/vue.js" type="application/javascript"></script>

</head>
<body>

    <div id="app">


        <cp1 a="1" b="2" t="3" v-if="showCp1" @child="getemit" @ch-arr="getArr"></cp1>
        <button @click="showCp1=!showCp1">切换cp1组件的渲染</button>
        <button @click="getemit()">001</button>
    </div>
    <script>

  
        Vue.component('cp1',{
            // props:['a','t'],
            // emits:[], 
            template:`
                <div>
                    <div> 我是cp1组件 </div>
                    <button @click="showself"> 查看组件实例自身 </button>  
                    <hr />
                    <div> ct: {{ ct }}</div>
                    <button @click="ct++"> ct递增 </button> 
                    <button @click="childLove">给父组件传参</button>
                    <button @click="childarr">给父组件传第二个参</button>
                </div>    
            `,
            data(){
                return {
                    k:1,
                    f:2,
                    c:3,
                    ct: 100,
                    timer: null,
                    gogobor:"猪猪侠",
                    myArr:[1,2,3,4]
                }
            },
            // 挂载阶段
            // before 在什么之前  create创建
            beforeCreate(){ 
                console.log('beforeCreate执行')
                // console.log('this.$el',this.$el)
                // console.log('this.$data',this.$data)
            },
            
            created(){ // 创建完成 到底创建了什么？ 完成了组件的实例的创建但是并没有挂载到网页当中
                console.log('created 执行')
                // console.log('this.$el',this.$el)
                // console.log('this.$data',this.$data)
            },
            // mount 挂载 （ vue把组件 具体的渲染到了页面当中 ）
            beforeMount(){
                console.log('beforeMount 执行')
                // console.log('this.$el',this.$el)
                // console.log('this.$data',this.$data)
            },
            mounted(){  // 挂载完成之后  一般如果需要进行节点的操作的话都必须在 mounted之后执行
                

                console.log('mounted 执行')
                // console.log('this.$el',this.$el)
                // console.log('this.$data',this.$data)
                // this.timer = setInterval(()=>{
                //     console.log(Date.now())
                // },1000)
            },
            // 更新阶段
            beforeUpdate(){
                console.log('beforeUpdate')
            },
            
            updated(){
                console.log('updated')
            },
            // 卸载阶段
            // destroy 销毁 摧毁
            beforeDestroy(){
                // 事件的解绑 和 定时器移除的最佳时机
                console.log('beforeDestroy') 
                // clearInterval(this.timer)
            },
            destroyed(){
                console.log('destroyed')
            },  
            methods:{
                showself(){
                    console.log('this',this)
                    // this.$el  得到的组件挂载的跟节点标签对象
                    // this.$data 就是 组件内部的配置的 data返回的对象
                    // this.$attrs 得到除了 props声明接收的属性以外的 组件上的自定义属性

                },
                childLove(){
                    this.$emit('child',this.gogobor);
                },
                childarr(){
                    this.$emit('ch-arr',this.myArr)
                }
            }

          
        })

        
        new Vue({
            el: '#app',
            data:{
                ct:'555',
                showCp1: true
            },
            methods:{
                fn1(res){
                    console.log('我是 根实例的 fn1',res)
                },
                getemit(emitVal){
                    console.log("我是子组件的值，给了：", emitVal)
                },
                getArr(val){
                    console.log("提取子组件的数组=>" , val)
                }
            },
            // mounted:{
                
            // }
        })
    </script>


</body>
</html>